package daohibernate;

import hibernate.HibernateUtil;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import negocio.beans.central.Proveedor;
import negocio.beans.oficinaventa.Marca;
import negocio.beans.oficinaventa.Rodamiento;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import vista.Rodamientos;


public class RodamientoDAO {
	private static RodamientoDAO instancia = null;
	private static SessionFactory sf = null;	
	
	public static RodamientoDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new RodamientoDAO();
		} 
		return instancia;
	}
	
	public void altaRodamiento(Rodamiento r){
		Session s = sf.openSession();
		s.beginTransaction();
		
		s.persist(r);
		
		s.flush();
		s.getTransaction().commit();
	}
	
	public void modificacionRodamiento(Rodamiento r){
		Session s = sf.openSession();
		s.beginTransaction();
		
		s.update(r);
		
		s.flush();
		s.getTransaction().commit();
		s.close();
	}
	
	public void bajaRodamiento(Rodamiento r){
		
		
		Session s = sf.openSession();
		s.beginTransaction();
		
		s.delete(r);
		
		s.flush();
		s.getTransaction().commit();	
		s.close();
	}
	
	public Rodamiento buscarRodamientoPorCodigo(String codigo){
		Session s = sf.openSession();
		
		List<Rodamiento> rods = s.createQuery("from Rodamiento where codigoEstandar = '" + codigo + "'").list();
		
		s.close();
		
		for(Rodamiento p : rods){
			return p;
		}
		
		return null;
	}
	
	
	public Rodamiento traerRodamiento(String serie,String sufijo, String marca, String origen)
	{
		
		Session s = sf.openSession();
	
		List<Rodamiento> rods = s.createQuery("from Rodamiento where codigoEstandar = '" + serie + "'" + " and sufijo = '" + sufijo + "' and marca = '" + marca +"' and origen = '" + origen + "'").list();
			
		s.close();
		
		for(Rodamiento p : rods){
			return p;
		}
		
		return null;
		
	}
	
	public ArrayList<Object[]> obtenerPreciosRodamientos(String codigo,String marca, String pais) {
		Session session = sf.openSession();
		session.beginTransaction();
		String where=" WHERE item.rodamiento.codigoEstandar = ? and lp.estado = 0 ";
		
		if(marca != null && !marca.equals("") )
			where = where + " and item.rodamiento.marca = :marca ";
		if(pais != null && !pais.equals("") )
			where = where + " and item.rodamiento.origen = :pais ";
			
		Query query = session.createQuery("SELECT lp.tipo,item.precio,item.rodamiento.marca,item.rodamiento.origen,lp.tipo,lp.proveedor,item.rodamiento " +
				" FROM ItemListaPrecio item INNER JOIN item.listaPrecio lp" + where +
				"ORDER BY precio ASC");
		query.setString(0, codigo);
		//query.setBoolean(1, true);
		
		if(marca != null && !marca.equals("") )
			query.setParameter("marca",marca); 
		if(pais != null && !pais.equals("") )
			query.setParameter("pais",pais);
			

		ArrayList<Object[]> o=  new ArrayList<Object[]>(query.list());
		//System.out.println("ProveedorDAO::obtenerPreciosRodamientos -> cantidad objetos:"+ Integer.toString(o.size()));
		session.flush();
		session.getTransaction().commit();
		session.close();
		return o;		
	}
}
